import Wechat from './src/wechat';
import { EventCallHandle } from './src/wechat';
import { Contact, getDisplayName } from './src/interface/contact';
import { Message } from './src/interface/message';

import * as qrcode from 'qrcode-terminal';
import * as fs from 'fs';
const request = require('request');
function a() {
  let bot: Wechat = null;
  /**
   * 尝试获取本地登录数据，免扫码
   * 这里演示从本地文件中获取数据
   */
  let loginTime: number = 0;
  let callback: EventCallHandle = {
    uuid(uuid: string) {
      qrcode.generate('https://login.weixin.qq.com/l/' + uuid, {
        small: true
      })
      console.log('二维码链接：', 'https://login.weixin.qq.com/qrcode/' + uuid)

    },
    user_avatar(dataUrl: string) {
      console.log('登录用户头像Data URL：', dataUrl)
    },
    login() {
      console.log('登录成功' + Date.now())
      loginTime = Date.now();
      // bot.pause();
      // 保存数据，将数据序列化之后保存到任意位置
      //fs.writeFileSync('./sync-data.json', JSON.stringify(bot.botData))
    },
    logout() {
      console.log('登出成功')
      // 清除数据
      fs.unlinkSync('./sync-data.json');

    },
    contacts_updated(contacts: Contact[]) {
      console.log(Date.now())
      console.log(Date.now() - loginTime)
      console.log('联系人数量：', Object.keys(bot.contacts).length + "_" + contacts.length)
    },
    message(msg: Message) {

      /**
       * 获取消息时间
       */
      // console.log(Buffer.from(msg.OriginalContent).toString("hex"));
      // console.log(Buffer.from("\u2005").toString("hex"));
      console.log(`----------${msg.getDisplayTime()}----------`)
      /**
       * 获取消息发送者的显示名
       */
      console.log(bot.contacts[msg.FromUserName].getDisplayName())
      console.log(msg.toUser.NickName);
      /**
       * 判断消息类型
       */

      switch (msg.MsgType) {
        case bot.CONF.MSGTYPE_TEXT:
          /**
           * 文本消息
           */
          if (msg.isGroupMsg) {
            console.log(getDisplayName(msg.fromUser) + (msg.isRoomAt ? ("->" + getDisplayName(msg.toUser)) : "") + ":" + msg.Content)
          } else
            console.log(msg.Content);


          break
        case bot.CONF.MSGTYPE_IMAGE:
          /**
           * 图片消息
           */
          console.log('图片消息，保存到本地')
          bot.getMsgImg(msg.MsgId).then(res => {
            fs.writeFileSync(`./media/${msg.MsgId}.jpg`, res.data)
          }).catch(err => {
            bot.emit('error', err)
          })
          break
        case bot.CONF.MSGTYPE_VOICE:
          /**
           * 语音消息
           */
          console.log('语音消息，保存到本地')
          bot.getVoice(msg.MsgId).then(res => {
            fs.writeFileSync(`./media/${msg.MsgId}.mp3`, res.data)
          }).catch(err => {
            bot.emit('error', err)
          })
          break
        case bot.CONF.MSGTYPE_EMOTICON:
          /**
           * 表情消息
           */
          console.log('表情消息，保存到本地')
          bot.getMsgImg(msg.MsgId).then(res => {
            fs.writeFileSync(`./media/${msg.MsgId}.gif`, res.data)
          }).catch(err => {
            bot.emit('error', err)
          })
          break
        case bot.CONF.MSGTYPE_VIDEO:
        case bot.CONF.MSGTYPE_MICROVIDEO:
          /**
           * 视频消息
           */
          console.log('视频消息，保存到本地')
          bot.getVideo(msg.MsgId).then(res => {
            fs.writeFileSync(`./media/${msg.MsgId}.mp4`, res.data)
          }).catch(err => {
            bot.emit('error', err)
          })
          break
        case bot.CONF.MSGTYPE_APP:
          if (msg.AppMsgType == 6) {
            /**
             * 文件消息
             */
            console.log('文件消息，保存到本地')
            bot.getDoc(msg.FromUserName, msg.MediaId, msg.FileName).then(res => {
              fs.writeFileSync(`./media/${msg.FileName}`, res.data)
              console.log(res.type);
            }).catch(err => {
              bot.emit('error', err)
            })
          }
          break
        default:
          break
      }
    },
    error(err: any) {
      console.info(err.message);
    }
  }
  try {
    bot = new Wechat(require('./sync-data.json'), callback)
  } catch (e) {
    bot = new Wechat(null, callback)
  }
  /**
   * 启动机器人
   */
  if (bot.PROP.uin) {
    // 存在登录数据时，可以随时调用restart进行重启
    bot.restart()
  } else {
    bot.start()
  }
}
a();
